#include<iostream>
using namespace std;

#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

#include<assert.h>

#include<vector>
#include<functional>
#include<unordered_map>

// 函数包装器，包装的函数返回值为void，参数为空，这些包装的函数就相当于命令
typedef function<void()> func;

// 存放所有命令的数组
vector<func> commands;
unordered_map<int, string> command_menu;


// 下面的四个函数就想当是简单版的命令
void readMysql()
{
    cout << "子进程["<< getpid() << "]接收到命令::访问数据库" << endl << endl;
}

void execuleUrl()
{
    cout << "子进程["<< getpid() << "]接收到命令::执行url解析" << endl << endl;
}

void cal()
{
    cout << "子进程["<< getpid() << "]接收到命令::执行加密任务" << endl << endl;
}

void save()
{
    cout << "子进程["<< getpid() << "]接收到命令::执行数据持久化任务" << endl << endl;
}

void load()
{
    // 把所有的命令集中加载到一块
    command_menu.insert(pair<int, string>(commands.size(), "访问数据库"));
    commands.push_back(readMysql);

    command_menu.insert(pair<int, string>(commands.size(), "执行url解析"));
    commands.push_back(execuleUrl);

    command_menu.insert(pair<int, string>(commands.size(), "执行加密任务"));
    commands.push_back(cal);

    command_menu.insert(pair<int, string>(commands.size(), "执行数据持久化任务"));
    commands.push_back(save);
}

void showCommands()
{
    for(auto& kv : command_menu)
    {
        cout << endl;
        cout << endl;

        cout << kv.first << '\t' << kv.second;

        cout << endl;
        cout << endl;
    }
}